home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 1 / LSD Compendium Deluxe 1.iso / a / programming / assembly / 68kmacros.lha / 68kMacros / macr881c.txt < prev   
Encoding:
Text File  |  1990-09-13  |  3.5 KB  |  89 lines

  1. ***************************************************************************
  2. *                                                                         *
  3. *   THIS CODE PERFORMS ONLY THE FUNCTION OF THE (A0) MACRO EQUIVALENT!!!  *
  4. *                                                                         *
  5. *           *****MC68000 AND MC68010 UNPROTECTED VERSION*****             *
  6. *                                                                         *
  7. *   NO CHECKING IS DONE FOR ILLEGAL FORMAT ERRORS OR COPROCESSOR          *
  8. *   DETECTED EXCEPTIONS!                                                  *
  9. *                                                                         *
  10. ***************************************************************************
  11.  
  12. NUMREGS  EQU       2            NUMBER OF SAVED REGISTERS
  13.  
  14.  
  15. MC68881  EQU       $838000      ADDRESS OF MC68881
  16. OPERAND  EQU       $10          MC68881 OPERAND REGISTER
  17. COMMAND  EQU       $0A          MC68881 COMMAND REGISTER
  18. RESPONSE EQU       $00          MC68881 RESPONSE REGISTER
  19.  
  20. * FLINE ENTERS HERE...
  21. FLINE    MOVE.L    A1,-(SP)     SAVE A1
  22.          MOVE.L    D1,-(SP)     SAVE D1
  23.          MOVE.L    NUMREGS*4+2(SP),A1           A1=USER PC
  24.          MOVE.W    (A1)+,D1     D1 = OPCODE WORD
  25.          CMP.W     #%1111001001000000,D1        ? CPID=1 AND GENERAL TYPE
  26.          BHS       NOTGEN       BR IF NEITHER
  27.  
  28. * GENERAL INSTRUCTION
  29.          MOVE.W    (A1)+,D1     D1 = CP COMMAND WORD
  30.          MOVE.W    D1,MC68881+COMMAND           PASS TO '881
  31. FGENWAIT CMP.W     #$8900,MC68881+RESPONSE      ? IS 881 BUSY
  32.          BEQ       FGENWAIT     LOOP IF SO TILL ITS READY
  33.          ADD.W     D1,D1        BREAK DOWN HIGH TWO BITS
  34.          BCS       GEN1XX       BR SPECIAL MOVES
  35.          BPL       GEN00X       BR REG-REG (MUST BE 000)
  36.  
  37.          ADD.W     D1,D1        TST NEXT BIT
  38.          BMI       GEN011       BR REG-MEM
  39.  
  40. * IS A MOVE IN GENERAL INSTRUCTION (INCLUDING FMOVECR)
  41.          ROL.W     #5,D1        SHIFT TYPE INTO WORD ACCESS POSITION
  42.          AND.W     #$000E,D1    ISOLATE JUST TYPE FIELD*2
  43.          MOVE.W    SIZETBL(D1.W),D1    OBTAIN SPECIAL TRANSFER SIZE CODE
  44.          BMI.S     GENTSPC      BR IF IS NONE, BYTE, OR WORD
  45.  
  46. * TRANSFER THE COUNT OF LONGWORDS
  47.          MOVE.L    A0,-(SP)     SAVE USER'S A0
  48. GENTINL  MOVE.L    (A0)+,MC68881+DATA   NEXT WORD IN
  49.          DBRA      D1,GENTINL   LOOP TILL DONE
  50.          MOVE.L   (SP)+,A0      RESTORE SAVED REGISTER
  51.          BRA       FINI         EXIT AS WE ARE DONE
  52.  
  53. * SPECIAL COUNT OF NONE (FMOVECR), BYTE OR WORD
  54. GENTSPC  ADD.B     #2,D1        OFFSET TO -1,0,+1
  55.          BMI.S     GENTW        BR WORD TRANSFER
  56.          BNE.S     FINI         BR FMOVECR (NO TRANSFER)
  57.  
  58. *MOVE BYTE IN
  59.          MOVE.B    (A0),MC68881+DATA STORE BYTE
  60.          BRA       FINI         EXIT
  61.  
  62. * MOVE WORD IN
  63. GENTW    MOVE.W    (A0),MC68881+DATA STORE WORD
  64.          BRA       FINI         EXIT
  65.  
  66. * SIZE TABLE - LONGWORDS TO COPY EXCEPT FOR NONE=-1  BYTE=-2  WORD=-3
  67. SIZETBL  DC.W      0            .L
  68.          DC.W      0            .S
  69.          DC.W      2            .X
  70.          DC.W      2            .P
  71.          DC.W     -3            .W
  72.          DC.W      1            .D
  73.          DC.W     -2            .B
  74.          DC.W     -1            FMOVECR (NONE)
  75.  
  76. * UPDATE PC AND RETURN TO CALLER
  77. FINI     MOVE.L    A1,NUMREGS*4+2(SP)  SAVE SCAN PC
  78.          MOVE.L    (SP)+,D1     RESTORE WORK
  79.          MOVE.L    (SP)+,A1     REGISTERS
  80.          RTE                    RETURN TO INVOKER
  81.  
  82. * UNEXAMPLED CODE HANDLES
  83. GEN011   EQU       *
  84. GEN00X   EQU       *
  85. GEN1XX   EQU       *
  86. NOTGEN   EQU       *
  87.  
  88.          END
  89.